

#-----------------------------------------------------
# SMO
#-----------------------------------------------------
$instance = "ROGUE"
$server = New-Object -TypeName Microsoft.SqlServer.Management.Smo.
Server -ArgumentList $instance

$dbname = "TestDB"
$db = New-Object -TypeName Microsoft.SqlServer.Management.Smo.
Database($server, $dbname)
$db.Create() 



#-----------------------------------------------------
# ADO.NET
#-----------------------------------------------------
$conn = New-Object System.Data.SqlClient.SqlConnection
$conn.ConnectionString = "Server=ROGUE;Database=Chinook;Integrated Security=True"
$cmd = New-Object System.Data.SqlClient.SqlCommand
$cmd.CommandText = "SELECT * FROM Album"
$cmd.Connection = $conn
$adapter = New-Object System.Data.SqlClient.SqlDataAdapter
$adapter.SelectCommand = $cmd
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataset)
$conn.Close()
$dataset.Tables[0]



#-----------------------------------------------------
# Send simple queries to SQL Server 
#-----------------------------------------------------
Import-Module SQLPS -DisableNameChecking

$servername = "ROGUE"
$database = "Chinook"

#query inside a here-string
$query = @"
SELECT 
    TOP 10 *
FROM
    dbo.Album
"@ 

#if not providing username and password
#then uses current context
Invoke-Sqlcmd -ServerInstance $servername -Database $database -Query $query


#-----------------------------------------------------
# Fix orphaned user
#-----------------------------------------------------
$query = @"
  ALTER USER $($username)
  WITH LOGIN = $($login)
"@
Invoke-Sqlcmd -ServerInstance $server -Database $database -Query $query




#-----------------------------------------------------
# Get Fragmentation Data
#-----------------------------------------------------

Import-Module SQLPS -DisableNameChecking

#current server name
$servername = "ROGUE"
$database = "Chinook"

$query = @"
SELECT 
	OBJECT_NAME(phys_stats.OBJECT_ID) AS [Object], 
	idx.name AS [Index Name], 
	phys_stats.index_type_desc [Index Type], 
	phys_stats.avg_fragmentation_in_percent [Fragmentation %],
	phys_stats.page_count [# Pages]
FROM 
	sys.dm_db_index_physical_stats(DB_ID(),NULL, NULL, NULL , N'LIMITED') AS phys_stats
	INNER JOIN sys.indexes AS idx WITH (NOLOCK)
	ON phys_stats.[object_id] = idx.[object_id] 
	AND phys_stats.index_id = idx.index_id
WHERE 
	phys_stats.database_id = DB_ID()
ORDER BY 
	phys_stats.avg_fragmentation_in_percent DESC;
"@

Invoke-Sqlcmd -ServerInstance $servername -Database $database -Query $query | Format-Table -AutoSize




#-----------------------------------------------------
# Export using bcp
#-----------------------------------------------------
$database = "Chinook"
$schema = "dbo"
$table = "Album"
$filename = "C:\Temp\results.txt"

$bcp = "bcp $($database).$($schema).$($table) out $filename -T -c"
Invoke-Expression $bcp



